# fesh

Un generador de feeds de Atom para cápsulas [Gemini](https://geminiprotocol.net) escrito en POSIX `sh`.

## Dependencias

* `sh`, `bash`, `zsh` u otro shell de tipo UNIX.
* GNU Coreutils, BusyBox, Toybox, sbase u otro paquete de herramientas de UNIX.
* Opcional `date -r` (no es POSIX), de lo contrario utiliza la fecha actual.

## Instalación

```
cd fesh
sudo cp fesh /usr/local/bin
```

## Tutorial

### Consideraciones

Todas las páginas de una cápsula Gemini deben contener al menos un título principal. `fesh` obtiene el título de las entradas a partir de la primera aparición de un encabezado de nivel 1 de un documento escrito en el lenguaje de marcado Gemini. Es recomendable utilizar la siguiente estructura:

```
# Título principal

Contenido...

## A

Contenido...

## B

### B-1

Contenido...

### B-2

Contenido...

## C

Contenido...

...
...
...
```

`fesh` escanea recursivamente el directorio raíz de una cápsula y obtiene las entradas para el feed de Atom basado en la fecha de modificación más reciente (cuando es posible) de todos los archivos con extensión `*.gmi` y `*.gemini`. Ignora archivos nombrados como `index.gmi` o `index.gemini` para las entradas.

> El feed de Atom generado se debe ubicar en la raíz de la carpeta de tu cápsula en el servidor Gemini.

### Primeros pasos

Genera un feed de Atom utilizando el directorio raíz de tu cápsula:

```
fesh -d miblog.com -c 'Mi blog' -r ~/miblog
```

Por defecto `fesh` genera un archivo `atom.xml` en el directorio de trabajo actual. Copia el archivo `atom.xml` en la raíz de la carpeta de tu cápsula en el servidor Gemini:

```
cp atom.xml /var/gemini/miblog
```

O en un solo paso:

```
fesh -d miblog.com -c 'Mi blog' -r ~/miblog -o /var/gemini/miblog
```

Ahora puedes difundir las nuevas publicaciones de tu cápsula compartiendo la URL Gemini `gemini://miblog.com/atom.xml`. Una buena idea es colocar un enlace del feed en tu cápsula o agregarlo en un servicio web Gemini agregador de feeds con soporte de Atom:

* CAPCOM Geminispace aggregator:
	* <gemini://gemini.circumlunar.space/capcom/>
* PlanetaLibre versión Gemini:
	* <gemini://reisub.nsupdate.info/planetalibre/>

> Cuando modifiques o agregues nuevo contenido a tu cápsula, repite el mismo procedimiento para actualizar tu feed.

## Referencias

* [IEEE - Especificación POSIX.](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html)
* [Dylan Araps - Colección de alternativas POSIX sh a procesos externos.](https://github.com/dylanaraps/pure-sh-bible)
* [Bruce Barnett - Tutoriales sobre UNIX.](https://www.grymoire.com/Unix/index.html)
* [W3C - Introducción a los feeds de Atom.](https://validator.w3.org/feed/docs/atom.html)
* [bashblog - Un script en Bash para crear blogs.](https://github.com/cfenollosa/bashblog)
* [Gemfeed - Genera un feed de Atom desde un directorio de archivos de text/gemini.](https://tildegit.org/solderpunk/gemfeed)
* [GemAtom - Un generador de feeds de Atom escrito en Rust.](https://git.sr.ht/~dr_tutut/gematom)

## Licencia

```
fesh -- An Atom feed generator for Gemini capsules written in POSIX sh.

Copyright (C) 2024  Ricardo García Jiménez <ricardogj08@riseup.net>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
```
